package app.util;

import java.io.File;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
  
  *http://www.cnblogs.com/lovingprince/archive/2011/04/26/2166245.html
  *java.naming.factory.initial    创建上下文的工厂，如果没有找到支持对应 name 上下文环境，就用这个工厂创建 创建默认的 context 
  *java.naming.provider.url ，用来配置 context 的初始 url 
  *java.naming.factory.object    创建特定的对象的工厂  
  *java.naming.factory.state ，用来创建查询 jndi state 状态的工厂  
  *java.naming.factory.url.pkgs   包名列表，在指定的包名下查找创建特定 url 的上下文的工厂，如果没有，则使用 
  
  *JNDI 标准获取这些参数的方式： 
  *1.InitContext 时指定 HashTable 
  *2.System.getProperties()  系统属性中获取 
  *3.从 classpath 的 jndi.properties  文件中获取 

*/
public class JNDITest {

	public static void main(String[] args) {
		String name = "aaa.txt";
		
		Hashtable<String, Object> env = new Hashtable<String, Object>();
		env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
		//name 如果使用了 URL 形式的参数例如： file:/test 或者 java:comp/env 或者 ldap:/xxx 
		//则分析出 scheme( 这里是 file 或者 java 或者 ldap), 
		//在 Context.URL_PKG_PREFIXES = "java.naming.factory.url.pkgs" 指定的包下查找 
		//包名 + "." + scheme + "." + scheme + "URLContextFactory" 的工厂类
		env.put(Context.PROVIDER_URL, "file:d:/");
		try {
			Context ctx = new InitialContext(env);
			File obj = (File)ctx.lookup(name);
			System.out.println(name + " is bound to " + obj);
		} catch (NamingException e) {
			System.out.println("Problems looking up " + name + ": " + e);
		}
	}
}
